#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
namespace Cephei.QL.Termstructures.Volatility
{
    /// <summary> 
	/// ! \f[ f(T-t) = [ a + b(T-t) ] e^{-c(T-t)} + d \f] following Rebonato's notation.
	/// </summary>
    [Guid ("4EC35284-075E-4684-8DD0-A2E0A4204BF5"),ComVisible(true)]
	public interface IAbcdFunction 
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 Double A {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double B {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double C {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double Covariance(Double t1, Double t2, Double T, Double S);
        /// <summary> 
		/// 
		/// </summary>
		 Double Covariance(Double t, Double T2, Double S);
        /// <summary> 
		/// 
		/// </summary>
		 Double D {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double InstantaneousCovariance(Double u, Double T, Double S);
        /// <summary> 
		/// 
		/// </summary>
		 Double InstantaneousVariance(Double t, Double T2);
        /// <summary> 
		/// INSTANTANEOUS
		/// </summary>
		 Double InstantaneousVolatility(Double t, Double T2);
        /// <summary> 
		/// 
		/// </summary>
		 Double LongTermVolatility {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double MaximumLocation {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double MaximumVolatility {get;}
        /// <summary> 
		/// PRIMITIVE
		/// </summary>
		 Double Primitive(Double t, Double T2, Double S);
        /// <summary> 
		/// 
		/// </summary>
		 Double ShortTermVolatility {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double Variance(Double tMin, Double tMax, Double T);
        /// <summary> 
		/// 
		/// </summary>
		 Double Volatility(Double tMin, Double tMax, Double T);
    }   

    /// <summary> 
	/// ! \f[ f(T-t) = [ a + b(T-t) ] e^{-c(T-t)} + d \f] following Rebonato's notation. Factory
	/// </summary>
   	[ComVisible(true)]
    public interface IAbcdFunction_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    IAbcdFunction Create (Microsoft.FSharp.Core.FSharpOption<Double> a, Microsoft.FSharp.Core.FSharpOption<Double> b, Microsoft.FSharp.Core.FSharpOption<Double> c, Microsoft.FSharp.Core.FSharpOption<Double> d);
    }
}

